/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package GUI;

import Threads.HiloEspera;
import Threads.HiloMatlab2;
import Logic.EscritorMatrices;
import Logic.MatricesOperaciones;
import Logic.LectorMatrices;
import Logic.EscritorArchivoResultadosConv;
import com.itextpdf.text.DocumentException;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.WindowConstants;

/**
 *
 * @author Ramiro 
 * Clase de la ventana de Resultados Convolucion, en donde se
 * muestran las matrices correspondientes a las disposiciones de los
 * colimadores, las UM aplicadas sobre cada una, y el resultado de la
 * convolucion de las mismas.
 */
public class ResultadosConvolucion extends javax.swing.JFrame {

    private String ruta;
    private String archivo;
    private Principal padre;
    public String dtaU;
    public String dosisU;
    public String umbralU;

    /**
     * Creates new form ResultadosConvolucion
     */
    public ResultadosConvolucion(String ruta, String nombreArchivo, Principal padre) {
        
        initComponents();

        this.setEnabled(true);

        dtaEdit.addKeyListener(new KeyAdapter() {
            public void keyTyped(KeyEvent e) {
                char c = e.getKeyChar();
                if (!(Character.isDigit(c)
                        || (c == KeyEvent.VK_BACK_SPACE)
                        || (c == KeyEvent.VK_DELETE))) {
                    e.consume();
                }
            }
        });
        dosisEdit.addKeyListener(new KeyAdapter() {
            public void keyTyped(KeyEvent e) {
                char c = e.getKeyChar();
                if (!(Character.isDigit(c)
                        || (c == KeyEvent.VK_BACK_SPACE)
                        || (c == KeyEvent.VK_DELETE))) {
                    e.consume();
                }
            }
        });
        umbralEdit.addKeyListener(new KeyAdapter() {
            public void keyTyped(KeyEvent e) {
                char c = e.getKeyChar();
                if (!(Character.isDigit(c)
                        || (c == KeyEvent.VK_BACK_SPACE)
                        || (c == KeyEvent.VK_DELETE))) {
                    e.consume();
                }
            }
        });
        this.paciente.setText(nombreArchivo.substring(0, nombreArchivo.length() - 4));
        this.ruta = ruta;
        this.archivo = nombreArchivo;
        this.padre = padre;
        this.setExtendedState(MAXIMIZED_BOTH);
        setearImagenes();
        this.setVisible(true);
    }

    private void setearImagenes() {
        Toolkit tk = Toolkit.getDefaultToolkit();

        String rutaImagen1 = this.ruta + "\\Otros\\" + (this.archivo.substring(0, this.archivo.length() - 4)) + "_pic1.jpg";
        String rutaImagen2 = this.ruta + "\\Otros\\" + (this.archivo.substring(0, this.archivo.length() - 4)) + "_pic2.jpg";

        botonVerResultados.setEnabled(false);

        Image image1 = tk.createImage(rutaImagen1);
        Image image2 = tk.createImage(rutaImagen2);

        imagen1.setIcon(new ImageIcon(image1.getScaledInstance(imagen1.getWidth(), imagen1.getHeight(), Image.SCALE_AREA_AVERAGING)));
        imagen2.setIcon(new ImageIcon(image2.getScaledInstance(imagen2.getWidth(), imagen2.getHeight(), Image.SCALE_AREA_AVERAGING)));

    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @Override
    public Image getIconImage() {
        Image retValue = Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource("IMG/3-400.png"));
        return retValue;
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        imagen1 = new javax.swing.JLabel();
        imagen2 = new javax.swing.JLabel();
        botonVolver = new javax.swing.JButton();
        botonVerResultados = new javax.swing.JButton();
        MensajesSistema = new javax.swing.JTextField();
        tituloImagen1 = new javax.swing.JTextField();
        tituloImagen2 = new javax.swing.JTextField();
        FirmaVentana = new javax.swing.JTextField();
        jPanel1 = new javax.swing.JPanel();
        paciente = new javax.swing.JTextField();
        dta = new javax.swing.JTextField();
        dtaEdit = new javax.swing.JTextField();
        umbralEdit = new javax.swing.JTextField();
        dosisEdit = new javax.swing.JTextField();
        botonComparacion = new javax.swing.JButton();
        dosis = new javax.swing.JTextField();
        umbral = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Cálculo Independiente");
        setAlwaysOnTop(true);
        setIconImage(getIconImage());
        setMaximumSize(new java.awt.Dimension(2147, 2147));
        setPreferredSize(new java.awt.Dimension(1366, 768));
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                formWindowClosing(evt);
            }
        });

        imagen1.setAlignmentX(LEFT_ALIGNMENT);
        imagen1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));

        imagen2.setAlignmentX(LEFT_ALIGNMENT);
        imagen2.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));

        botonVolver.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        botonVolver.setLabel("Volver");
        botonVolver.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonVolverActionPerformed(evt);
            }
        });

        botonVerResultados.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        botonVerResultados.setText("Ver validación");
        botonVerResultados.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonVerResultadosActionPerformed(evt);
            }
        });

        MensajesSistema.setEditable(false);
        MensajesSistema.setBackground(new java.awt.Color(215, 215, 215));
        MensajesSistema.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        MensajesSistema.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        MensajesSistema.setBorder(null);
        MensajesSistema.setFocusable(false);

        tituloImagen1.setBackground(new java.awt.Color(215, 215, 215));
        tituloImagen1.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        tituloImagen1.setText(" Cálculo Independiente");
        tituloImagen1.setBorder(null);
        tituloImagen1.setFocusable(false);

        tituloImagen2.setBackground(new java.awt.Color(215, 215, 215));
        tituloImagen2.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        tituloImagen2.setText(" Imagen MLCs");
        tituloImagen2.setBorder(null);
        tituloImagen2.setFocusable(false);

        FirmaVentana.setEditable(false);
        FirmaVentana.setBackground(new java.awt.Color(215, 215, 215));
        FirmaVentana.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N
        FirmaVentana.setForeground(new java.awt.Color(0, 51, 255));
        FirmaVentana.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        FirmaVentana.setText("Proyecto Final ISI - Burgos, Scarafia - IMRT");
        FirmaVentana.setBorder(null);
        FirmaVentana.setFocusable(false);
        FirmaVentana.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                FirmaVentanaActionPerformed(evt);
            }
        });

        jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        paciente.setEditable(false);
        paciente.setBackground(new java.awt.Color(215, 215, 215));
        paciente.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        paciente.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        paciente.setText("-");
        paciente.setBorder(null);
        paciente.setFocusable(false);
        paciente.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                pacienteActionPerformed(evt);
            }
        });

        dta.setEditable(false);
        dta.setBackground(new java.awt.Color(215, 215, 215));
        dta.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        dta.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        dta.setText("DTA (En mm):");
        dta.setBorder(null);
        dta.setFocusable(false);
        dta.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                dtaActionPerformed(evt);
            }
        });

        dtaEdit.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N

        umbralEdit.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N

        dosisEdit.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N

        botonComparacion.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        botonComparacion.setText("Verificar");
        botonComparacion.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonComparacionActionPerformed(evt);
            }
        });

        dosis.setEditable(false);
        dosis.setBackground(new java.awt.Color(215, 215, 215));
        dosis.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        dosis.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        dosis.setText("Dosis (En porcentaje):");
        dosis.setBorder(null);
        dosis.setFocusable(false);

        umbral.setEditable(false);
        umbral.setBackground(new java.awt.Color(215, 215, 215));
        umbral.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        umbral.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        umbral.setText("Umbral (En porcentaje):");
        umbral.setBorder(null);
        umbral.setFocusable(false);

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGap(10, 10, 10)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGap(32, 32, 32)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addGap(59, 59, 59)
                                .addComponent(botonComparacion, javax.swing.GroupLayout.PREFERRED_SIZE, 170, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                    .addComponent(umbral)
                                    .addComponent(dosis)
                                    .addComponent(dta, javax.swing.GroupLayout.PREFERRED_SIZE, 172, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addGap(18, 18, 18)
                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                    .addComponent(umbralEdit)
                                    .addComponent(dosisEdit)
                                    .addComponent(dtaEdit, javax.swing.GroupLayout.PREFERRED_SIZE, 78, javax.swing.GroupLayout.PREFERRED_SIZE)))))
                    .addComponent(paciente, javax.swing.GroupLayout.PREFERRED_SIZE, 332, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(10, 10, 10))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGap(10, 10, 10)
                .addComponent(paciente, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(dtaEdit, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(dta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(dosisEdit, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(dosis, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(umbralEdit, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(umbral, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addComponent(botonComparacion, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(10, 10, 10))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(MensajesSistema)
                            .addComponent(FirmaVentana)
                            .addGroup(layout.createSequentialGroup()
                                .addGap(0, 0, Short.MAX_VALUE)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                            .addComponent(botonVerResultados, javax.swing.GroupLayout.PREFERRED_SIZE, 170, javax.swing.GroupLayout.PREFERRED_SIZE)
                                            .addComponent(botonVolver, javax.swing.GroupLayout.PREFERRED_SIZE, 170, javax.swing.GroupLayout.PREFERRED_SIZE))
                                        .addGap(83, 83, 83)))
                                .addGap(0, 0, Short.MAX_VALUE))))
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                        .addGap(127, 127, 127)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(imagen2, javax.swing.GroupLayout.PREFERRED_SIZE, 400, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(tituloImagen1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 345, Short.MAX_VALUE)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(imagen1, javax.swing.GroupLayout.PREFERRED_SIZE, 400, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(tituloImagen2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(127, 127, 127)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(FirmaVentana, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(tituloImagen2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(tituloImagen1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(imagen2, javax.swing.GroupLayout.PREFERRED_SIZE, 300, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(imagen1, javax.swing.GroupLayout.PREFERRED_SIZE, 300, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(botonVerResultados, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(botonVolver, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 26, Short.MAX_VALUE)
                .addComponent(MensajesSistema, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(12, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    /**
     * Boton Volver, el cual vuelve a la ventana principal del Sistema de
     * Verificacion IMRT.
     *
     * @param evt
     */
    private void botonVolverActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonVolverActionPerformed

        padre.setVisible(true);
        this.dispose();
    }//GEN-LAST:event_botonVolverActionPerformed

    private void dtaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_dtaActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_dtaActionPerformed
    
    /**
     * Boton Realizar Comparación, el cual realiza la comparacion entre la dosis
     * calculada por el Verificador, y la dosis calculada con el Planificador.
     *
     * @param evt Este boton ejecuta los hilos correspondientes a la ventana de
     * espera mientras realiza los calculos correspondientes y el hilo que
     * ejecuta los calculos necesarios para la comparacion en MatLab.
     */
    private void botonComparacionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonComparacionActionPerformed

        String archivoDICOM = null;

        if ((dtaEdit.getText().isEmpty()) || (dosisEdit.getText().isEmpty()) || (umbralEdit.getText().isEmpty())) {
            JOptionPane.showMessageDialog(this, "Hay campos incompletos");
        } else 
            if(((Double.parseDouble(dosisEdit.getText()))<=0) || ((Double.parseDouble(dosisEdit.getText()))>=100)){
               JOptionPane.showMessageDialog(this, "El porcentaje de la \"Dosis\" es incorrecto, por favor verifique"); 
            }
            else 
            if(((Double.parseDouble(umbralEdit.getText()))<=0) || ((Double.parseDouble(umbralEdit.getText()))>=100)){
               JOptionPane.showMessageDialog(this, "El porcentaje del \"Umbral\" es incorrecto, por favor verifique"); 
            }
            else{

            //Abro el archivo MLC correspondiente
            try {

                //Compruebo si existe el archivo DICOM correspondiente al MLC seleccionado
                archivoDICOM = "729_QA_" + archivo.substring(archivo.length() - 5, archivo.length() - 4) + ".dcm";
                
                //Copia archivo dicom "729_QA_*" correspondiente a la carpeta "\Otros" para realizar la validacion.
                FileInputStream fis = new FileInputStream(ruta + "\\" + archivoDICOM); //inFile -> Archivo a copiar
                FileOutputStream fos = new FileOutputStream(ruta + "\\Otros\\" + archivoDICOM); //outFile -> Copia del archivo
                FileChannel inChannel = fis.getChannel(); 
                FileChannel outChannel = fos.getChannel(); 
                inChannel.transferTo(0, inChannel.size(), outChannel); 
                fis.close(); 
                fos.close();
                
                File archivoDICOMAbierto = new File(ruta + "\\Otros\\" + archivoDICOM);
                FileReader fr = new FileReader(archivoDICOMAbierto);
                fr.close();

                MatricesOperaciones m = new MatricesOperaciones();

                double dTA = Double.parseDouble(dtaEdit.getText());
                double dosed = (Double.parseDouble(dosisEdit.getText()));

                this.MensajesSistema.setForeground(Color.RED);
                this.MensajesSistema.setText("Realizando validación, por favor espere");

                dosed = dosed / 100;

                //Guardo los datos del PPF seleccionado
                EscritorArchivoResultadosConv file1 = new EscritorArchivoResultadosConv(ruta);
                file1.GuardarArchivo(this.archivo, Double.toString(dTA), Double.toString(dosed), umbralEdit.getText());

                dtaU = dtaEdit.getText();
                dosisU = dosisEdit.getText();
                umbralU = umbralEdit.getText();

                HiloEspera hilo;
                hilo = new HiloEspera("Hilo", ruta+"\\Otros\\", archivo, this);


            } catch (FileNotFoundException e) {
                JOptionPane.showMessageDialog(this, "No se encuentra el archivo " + archivoDICOM + " correspondiente\n"
                        + "      Para continuar, ubíquelo en la carpeta del paciente");
            } catch (IOException ex) {
                Logger.getLogger(ResultadosConvolucion.class.getName()).log(Level.SEVERE, null, ex);
                JOptionPane.showMessageDialog(this, "Error, no se puede crear el archivo");
            }

        }

    }//GEN-LAST:event_botonComparacionActionPerformed
    /**
     * Boton Ver Resultados, el cual llama a la ventana de Resultados
     * Comparacion en donde se muestra la dosis calculada por el Sistema de
     * Verificacion IMRT, la dosis calculada por el Planificador, y la imagen
     * Gamma que indica la comparacion entre las mismas.
     *
     * @param evt
     */
    private void botonVerResultadosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonVerResultadosActionPerformed
      
        ResultadosComparacion res = new ResultadosComparacion(this.ruta+"\\Otros\\", this.archivo, this);
        this.setVisible(false);
    }//GEN-LAST:event_botonVerResultadosActionPerformed

    private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing

        setAlwaysOnTop(false);
        int eleccion = JOptionPane.showConfirmDialog(null, "¿Esta seguro que desea cerrar el programa?", "Cerrando Sistema", 2);
        if (eleccion == 0) {
            System.exit(0);
        } else {
            setAlwaysOnTop(true);
            setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
        }
    }//GEN-LAST:event_formWindowClosing

    private void FirmaVentanaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_FirmaVentanaActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_FirmaVentanaActionPerformed

    private void pacienteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pacienteActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_pacienteActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JTextField FirmaVentana;
    private javax.swing.JTextField MensajesSistema;
    private javax.swing.JButton botonComparacion;
    private javax.swing.JButton botonVerResultados;
    private javax.swing.JButton botonVolver;
    private javax.swing.JTextField dosis;
    private javax.swing.JTextField dosisEdit;
    private javax.swing.JTextField dta;
    private javax.swing.JTextField dtaEdit;
    private javax.swing.JLabel imagen1;
    private javax.swing.JLabel imagen2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JTextField paciente;
    private javax.swing.JTextField tituloImagen1;
    private javax.swing.JTextField tituloImagen2;
    private javax.swing.JTextField umbral;
    private javax.swing.JTextField umbralEdit;
    // End of variables declaration//GEN-END:variables

    public void continuacionComparacion(HiloEspera hilo){
        String archivoDICOM = null;
        try {

                //Compruebo si existe el archivo DICOM correspondiente al MLC seleccionado
                archivoDICOM = "729_QA_" + archivo.substring(archivo.length() - 5, archivo.length() - 4) + ".dcm";
                File archivoDICOMAbierto = new File(ruta + "\\Otros\\" + archivoDICOM);
                FileReader fr = new FileReader(archivoDICOMAbierto);
                fr.close();

                MatricesOperaciones m = new MatricesOperaciones();

                double dTA = Double.parseDouble(dtaEdit.getText());
                double dosed = (Double.parseDouble(dosisEdit.getText()));

                dosed = dosed / 100;

                //Guardo los datos del PPF seleccionado
                EscritorArchivoResultadosConv file1 = new EscritorArchivoResultadosConv(ruta);
                file1.GuardarArchivo(this.archivo, Double.toString(dTA), Double.toString(dosed), umbralEdit.getText());

                dtaU = dtaEdit.getText();
                dosisU = dosisEdit.getText();
                umbralU = umbralEdit.getText();
                
                LectorMatrices lector = new LectorMatrices(ruta+"\\Otros\\", "matrizA1.txt");
                Vector<Vector> matrizA1 = lector.AbrirArchivo();
                double maxA1 = m.maxMax(matrizA1);

                LectorMatrices lector2 = new LectorMatrices(ruta+"\\Otros\\", "matrizA2.txt");
                Vector<Vector> matrizA2 = lector2.AbrirArchivo();

                dosed = dosed * maxA1;

                Vector<Vector> G = m.funcionFor(matrizA1, matrizA2, ruta, dTA, dosed);//le agregue la ruta para poder imprimir la matriz Ga

                EscritorMatrices w = new EscritorMatrices(ruta, "matrizG");
                w.GuardarArchivo(G);

                HiloMatlab2 hilo2 = new HiloMatlab2("Hilo", ruta+"\\Otros\\", archivo, padre, 1, hilo);
                hilo2.run();

                this.MensajesSistema.setForeground(Color.BLACK);
                this.MensajesSistema.setText("CÁLCULOS REALIZADOS EXITOSAMENTE");//Muestro un mensaje de espere mientras se realizan los calculos

                botonVerResultados.setEnabled(true);

            } catch (FileNotFoundException e) {
                JOptionPane.showMessageDialog(this, "No se encuentra el archivo " + archivoDICOM + " correspondiente\n"
                        + "      Para continuar, ubíquelo en la carpeta del paciente");
            } catch (IOException ex) {
                Logger.getLogger(ResultadosConvolucion.class.getName()).log(Level.SEVERE, null, ex);
                JOptionPane.showMessageDialog(this, "Error, no se puede crear el archivo");
            }

        }
        
    

}
